
#include "pwm.h"


/**
 * @brief       初始化PWM
 * @param       resolution： PWM占空比分辨率
 *              freq： PWM信号频率
 * @retval      无
 */
void pwm_init(uint8_t resolution, uint16_t freq)
{
    /* 配置LEDC定时器 */
    ledc_timer_config_t ledc_timer = {
        .duty_resolution = resolution,          /* PWM占空比分辨率 */
        .freq_hz = freq,                        /* PWM信号频率 */
        .speed_mode = LEDC_LOW_SPEED_MODE,      /* 定时器模式 */
        .timer_num = LEDC_PWM_TIMER,            /* 定时器序号 */
        .clk_cfg = LEDC_AUTO_CLK,               /* LEDC时钟源 */
    };
    ledc_timer_config(&ledc_timer);             /* 配置定时器 */

    /* 配置LEDC通道 */
    ledc_channel_config_t ledc_channel ={
        .gpio_num = LEDC_PWM_CH0_GPIO,          /* LED控制器通道对应引脚 */
        .speed_mode = LEDC_LOW_SPEED_MODE,      /* LEDC高速模式 */
        .channel = LEDC_PWM_CH0_CHANNEL,        /* LEDC控制器通道号 */
        .intr_type = LEDC_INTR_DISABLE,         /* LEDC失能中断 */
        .timer_sel = LEDC_PWM_TIMER,            /* 定时器序号 */
        .duty = 0,                              /* 占空比值 */
        };
    ledc_channel_config(&ledc_channel);         /* 配置LEDC通道 */
}

/**
 * @brief       PWM占空比设置
 * @param       duty：PWM占空比
 * @retval      无
 */
void pwm_set_duty(uint16_t duty)
{
    ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_PWM_CH0_CHANNEL, duty); /* 设置占空比 */
    ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_PWM_CH0_CHANNEL);    /* 更新占空比 */
}
